19. Seaborn库基础

Seaborn:基于Matplotlib的高级可视化库

Seaborn建立在Matplotlib之上,专为统计数据可视化而设计。

  • 更美观:默认样式更现代、更专业
  • 更简洁:更少代码即可实现复杂图表
  • 统计导向:内置统计图表类型(箱线图、小提琴图、热力图等)
  • 数据集支持:自带多个经典数据集(tips、titanic等)

⭐ 泰坦尼克数据集分析

# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
import seaborn as sns  # 导入Seaborn可视化库
import matplotlib.pyplot as plt  # 导入Matplotlib绑图库
# 加载titanic数据集
titanic = sns.load_dataset("titanic")
# 使用catplot函数绘制柱状图
sns.catplot(x="class", y="survived", hue="sex", data=titanic, kind="bar")
# 设置标题
plt.subplots_adjust(top=0.9)
plt.suptitle("Survival rate by class and sex")  # 设置图形总标题
# 显示图形
plt.savefig("1.png")
Listing 1: 泰坦尼克乘客数据可视化分析

泰坦尼克代码解读

  • sns.load_dataset('titanic'):加载Seaborn内置的泰坦尼克数据集
  • sns.catplot():绑制分类数据图表
    • x='class':横轴为船舱等级
    • y='survived':纵轴为存活率
    • hue='sex':按性别分组着色
    • kind='bar':指定图表类型为柱状图

常用Seaborn图表:箱线图

箱线图(Boxplot) 展示数据的分布特征:

  • 箱体表示四分位数范围(Q1到Q3)
  • 箱内横线为中位数
  • 触须延伸至1.5倍IQR范围
  • 超出范围的点标记为异常值
sns.boxplot(data=data, x='Category', y='Value1')

常用Seaborn图表:小提琴图

小提琴图(Violinplot) 是箱线图与核密度估计的结合:

  • 宽度表示数据在该值处的密度
  • 越宽表示出现频率越高
  • 可以发现多峰分布等特征
  • 比箱线图提供更多分布形状信息
sns.violinplot(data=data, x='Category', y='Value1')

常用Seaborn图表:热力图

热力图(Heatmap) 用于可视化矩阵数据,常用于相关性分析:

  • 颜色深浅表示数值大小
  • annot=True:在格子中显示数值
  • cmap='coolwarm':冷暖色方案(蓝=负相关,红=正相关)
corr = data[['Value1', 'Value2']].corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')

常用Seaborn图表:回归散点图

回归散点图(Regplot) 结合散点图和线性回归拟合:

  • 自动计算并绘制线性回归线
  • 绘制95%置信区间(半透明阴影)
  • 直观判断变量关系强度和拟合优度
sns.regplot(data=data, x='Value1', y='Value2')

四种图表综合演示

import numpy as np
import pandas as pd

# 设置随机种子,确保结果可重复
np.random.seed(42)

# 创建包含100行数据的DataFrame
data = pd.DataFrame({
    'Category': np.random.choice(['A', 'B', 'C'], 100),
    'Value1': np.random.randn(100),
    'Value2': np.random.randn(100) + 2
})

# 创建2x2的子图布局
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 子图1:箱线图
sns.boxplot(data=data, x='Category', y='Value1', ax=axes[0, 0])
axes[0, 0].set_title('箱线图')

# 子图2:小提琴图
sns.violinplot(data=data, x='Category', y='Value1', ax=axes[0, 1])
axes[0, 1].set_title('小提琴图')

# 子图3:热力图
corr = data[['Value1', 'Value2']].corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', ax=axes[1, 0])
axes[1, 0].set_title('相关性热力图')

# 子图4:散点图带回归线
sns.regplot(data=data, x='Value1', y='Value2', ax=axes[1, 1])
axes[1, 1].set_title('散点图与回归线')

plt.tight_layout()
plt.show()
Listing 2: Seaborn常用图表类型

Seaborn内置样式

sns.set_style() 设置图表的整体风格:

样式名称 特点 适用场景
whitegrid 白色背景 + 网格 数据展示(推荐)
darkgrid 深色背景 + 网格 深色主题
white 纯白背景 简洁风格
dark 深色背景 护眼模式
ticks 白色背景 + 刻度线 学术论文

Seaborn配色方案

sns.set_palette() 设置图表颜色循环:

  • 'husl':均匀色彩空间,区分度高
  • 'pastel':柔和粉彩色系
  • 'dark':深色调
  • 'colorblind':色盲友好配色
  • 'Set1''Set2':Matplotlib内置配色

多维散点图:样式与配色实战

# 设置样式和配色
sns.set_style('whitegrid')
sns.set_palette('husl')

plt.figure(figsize=(10, 6))

# 加载小费数据集
data_plot = sns.load_dataset('tips')

# 绘制多维散点图:颜色=星期,大小=人数
sns.scatterplot(data=data_plot, x='total_bill', y='tip', hue='day', size='size')

plt.title('餐厅小费分析', fontsize=14)
plt.xlabel('总账单', fontsize=12)
plt.ylabel('小费', fontsize=12)
plt.legend(title='星期')
plt.show()
Listing 3: Seaborn样式设置示例

散点图代码解读

sns.scatterplot() 支持多维数据映射:

  • x='total_bill':横轴为总账单金额
  • y='tip':纵轴为小费金额
  • hue='day':按星期着色,不同颜色表示不同日期
  • size='size':按人数映射点的大小

从图中可以观察到:总账单与小费呈正相关,周末小费比例可能不同。

本章小结

  • Seaborn是基于Matplotlib的高级统计可视化库
  • 四种核心图表:箱线图、小提琴图、热力图、回归散点图
  • set_style() 控制图表风格,set_palette() 控制配色
  • huesize 参数实现多维数据映射
  • Seaborn内置多个经典数据集,方便学习和演示